unit UHilo;
interface
uses
Classes, SysUtils, Math;
type
Vect= array [0..31] of double;
Hilo = class(TThread)
private
{ Private declarations }
PuertoFisico, PuertoAbs: integer;
protected
procedure Execute; override;
public
senalT, senalL: Vect;
adr: integer;
dat: integer;
constructor Create(const prioridad, pFisico, pAbs: integer);
procedure paintTemperaturaH();
procedure paintLuzH();
procedure imprimirDatos();
end;
implementation
uses
IdSocketHandle, IdThread, UServer;
constructor Hilo.Create(const prioridad, pFisico, pAbs: integer);
var
i: integer;
begin
inherited Create(False);
FreeOnTerminate:= False;
PuertoFisico:= pFisico;
PuertoAbs:= pAbs;
adr:= 0;
dat:= 0;
for i:= 0 to Length(senalT)-1 do
begin
senalT[i]:= 0;
senalL[i]:= 0;
end;
Priority:= TThreadPriority(prioridad);
end;
FUNCTION PortIn(IOport: WORD): BYTE; ASSEMBLER; REGISTER;
ASM
MOV DX,AX
IN AL,DX
END;
PROCEDURE PortOut(IOport: WORD; Value: BYTE ); ASSEMBLER; REGISTER;
ASM
XCHG DX,AX
OUT DX,AL
END;
procedure Hilo.Execute;
begin
while true do
begin
dat:= PortIn(PuertoFisico);
FServer.BroadcastValue(dat);
if (dat = 254)or(dat = 255) then
begin
adr:= dat;
//PortOut(PuertoFisico, dat);
end
else
begin
if adr <> 0 then
begin
case adr of
254:
begin
//PortOut(PuertoFisico, round(dat/2.581632605)); //Pongo temperatura
Synchronize(paintTemperaturaH);
end;
255:
begin
//PortOut(PuertoFisico, dat);
Synchronize(paintLuzH);
end;
end;
end;
end;
end;
end;
procedure Hilo.paintTemperaturaH();
var
i: integer;
begin
FServer.Series1.Clear;
for i:= Length(senalT)-1 downto 1 do
senalT[i]:= senalT[i-1];
senalT[0]:= dat/2.56565656;
FServer.Series1.AddArray(senalT);
FServer.ETemperatura.Text:= FloatToStr(Round(dat/2.56565656));
end;
procedure Hilo.paintLuzH();
var
i: integer;
begin
FServer.Series2.Clear;
for i:= Length(senalL)-1 downto 1 do
senalL[i]:= senalL[i-1];
senalL[0]:= dat;
FServer.Series2.AddArray(senalL);
FServer.ELuz.Text:= IntToStr(dat);
end;
procedure Hilo.imprimirDatos();
begin
FServer.MMensajes.Lines.Add(IntToStr(dat));
end;
end.
               (
geocities.com/tiger928rs)